//定制请求的实例

//导入axios  npm install axios
import axios from 'axios';
import { ElMessage } from 'element-plus'
//定义一个变量,记录公共的前缀  ,  baseURL
const baseURL = '/api';
const instance = axios.create({ baseURL })
    //导入路由器
import router from '@/router'

//添加请求拦截器
import { loginInfoStore } from '@/stores/loginInfo';
instance.interceptors.request.use(
    (config) => {
        //添加token
        const store = loginInfoStore();
        //判断是否有token
        if (store.token) {
            config.headers.Authorization = store.token;
        }
        return config;
    },
    (error) => {
        //请求错误
        return Promise.reject(error);
    }
)


//添加响应拦截器
instance.interceptors.response.use(
    result => {
        // 处理blob类型响应（如文件下载）
        if (result.config.responseType === 'blob') {
            return result;
        }
        // 处理空响应或void返回类型
        if (!result.data || result.data === '' || Object.keys(result.data).length === 0) {
            return result;
        }
        // 处理标准JSON响应
        if (result.data.code === 1) { //请求成功
            return result.data;
        }
        //请求失败
        ElMessage.error(result.data.msg ? result.data.msg : '服务异常')
        return Promise.reject(result.data); //异步的状态转化成失败的状态
    },
    err => {
        //判断响应状态码是否为401,如果是,则跳转到登录页面
        if (err.response && err.response.status === 401) {
            ElMessage.error('请先登录')
                //跳转到登录页面
            router.push('/')
        } else {
            ElMessage.error('服务异常')
        }
        return Promise.reject(err); //异步的状态转化成失败的状态
    }
)

export default instance;